home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
ada
/
gnat1792.zip
/
gnat179b
/
examples
/
demo2.adb
< prev
next >
Wrap
Text File
|
1994-05-13
|
3KB
|
92 lines
with Instr; use Instr;
with Instr.Child; use Instr.Child;
with Io; use Io;
with Gen_List;
procedure Demo2 is
type Acc is access Instrument'Class;
package Dash_Board is new Gen_List (Acc);
use Dash_Board;
procedure Print_Dash_Board (L : List) is
L1 : List := L;
begin
while L1 /= Nil loop
Display_Value (Element (L1).all);
L1 := Tail (L1);
end loop;
New_Line;
end Print_Dash_Board;
DB : List := Nil;
Inc, Sec : Integer;
begin
DB := Append (new Speedometer, -- 1
Append (new Gauge, -- 2
Append (new Graphic_Gauge, -- 3
Append (new Graphic_Gauge, -- 4
Append (new Clock, -- 5
Append (new Chronometer, -- 6
Append (new Accurate_Clock))))))); -- 7
Set_Name (Element (DB, 1).all, "Speed");
Set_Name (Element (DB, 2).all, "Fuel");
Set_Name (Element (DB, 3).all, "Water");
Set_Name (Element (DB, 4).all, "Oil");
Set_Name (Element (DB, 5).all, "Time in NY");
Set_Name (Element (DB, 6).all, "Chrono");
Set_Name (Element (DB, 7).all, "Time in Paris");
Speedometer (Element (DB, 1).all).Value := 45; -- mph
Gauge (Element (DB, 2).all).Value := 60; -- %
Graphic_Gauge (Element (DB, 3).all).Value := 80; -- %
Graphic_Gauge (Element (DB, 4).all).Value := 40; -- %
Init (Clock (Element (DB, 5).all), 12, 15, 0);
Init (Chronometer (Element (DB, 6).all), 0, 0, 0);
Init (Accurate_Clock (Element (DB, 7).all), 6, 15, 0);
loop
Print_Dash_board (DB);
if Graphic_Gauge (Element (DB, 3).all).Value < 60 then
Put_Line ("There is a leak in the radiator.");
end if;
if Speedometer (Element (DB, 1).all).Value> 50 then
Put_Line (" Speed limit is 50 ... ");
end if;
if Clock (Element (DB, 5).all).Seconds
/= Accurate_Clock (Element (DB, 7).all).Seconds
then
Put_Line (" Your first clock is not very accurate ");
end if;
Put ("Give a time increment in milliseconds (0 to terminate) :");
Get (Inc);
exit when Inc <= 0;
Sec := Inc / 1000;
Increment (Clock (Element (DB, 5).all), Sec);
Increment (Chronometer (Element (DB, 6).all), Sec);
Increment (Accurate_Clock (Element (DB, 7).all), Inc);
Gauge (Element (DB, 2).all).Value :=
Integer (Float (Gauge (Element (DB, 2).all).Value)
* (1.0 - Float (Sec) / 3600.0));
Graphic_Gauge (Element (DB, 3).all).Value :=
Integer (Float (Graphic_Gauge (Element (DB, 3).all).Value)
* (1.0 - Float (Sec) / 600.0));
Speedometer (Element (DB, 1).all).Value :=
Speedometer (Element (DB, 1).all).Value + 2;
end loop;
exception
when Others => Put_Line ("I think that's enough for today... Bye");
end Demo2;